prompt1="这是一个ACM的编程题，现在请你先复述一遍题目和测试数据，按题目原本的描述进行描述，然后在进行python编程解答"
#必须选择gpt-5作为model。如果没改对，告诉他示例没有完全通过

prompt2="""
示例没有完全通过，输入输出改写成
n = input()      #指定为N个数，输入,表示第一行的输入
lst = []         #指定一个空列表
for i in range(int(n)):        #循环N次
    lst.append(int(input()))      #不断的调用接下来行的输入

"""
# 超市要对一批货架上的商品进行备货检查。货架上共有 n 个连续的货位（编号 1 到 n），每个货位放置一种商品。现有 m 类商品（编号 1 到 m），给出在备货区间内各类商品的最低出现次数要求 b1..bm（bi 为非负整数，bi=0 表示该类无要求）。
# 请找出最短的连续区间 [l, r]（区间长度为 r-l+1），使得该区间内 1 到 m 类商品的出现次数均不低于上述要求。若不存在，输出 -1。
# 输入格式：
# 第一行：两个整数 n 和 m（1 ≤ n, m ≤ 10^5）。
# 第二行：n 个整数，依次表示各货位上的商品编号（范围 1..m）。
# 第三行：m 个整数，依次表示从 1 到 m 类商品的最低出现次数要求（b1..bm）。保证所有需求为不超过 10^5 的非负整数。
# 输出格式：
# 输出一个整数，表示满足要求的最短区间长度；若不存在，输出 -1。


# 解题思路（双指针滑动窗口）
# 维护窗口内每个种类的计数 cnt，以及已满足需求的种类数 satisfied。
# 扩展右端点加入一个货位；当某类的计数第一次达到其需求时，satisfied += 1。
# 当 satisfied == m 时，不断收缩左端点以尝试缩短区间，同时维护 satisfied。
# 先做可行性剪枝：若某类的总出现次数小于其需求，直接输出 -1。若全部需求为 0，则最短区间长度为 1。
import sys

def solve():
    data = sys.stdin.read().strip().split()
    if not data:
        return
    it = iter(map(int, data))
    n = next(it)
    m = next(it)
    arr = [next(it) for _ in range(n)]
    need = [0] * (m + 1)
    for i in range(1, m + 1):
        need[i] = next(it)

    # 可行性检查
    total = [0] * (m + 1)
    for x in arr:
        if 1 <= x <= m:
            total[x] += 1
    for i in range(1, m + 1):
        if need[i] > total[i]:
            print(-1)
            return

    # 如果所有需求为 0，最短区间长度为 1
    if all(need[i] == 0 for i in range(1, m + 1)):
        print(1)
        return

    cnt = [0] * (m + 1)
    satisfied = sum(1 for i in range(1, m + 1) if need[i] == 0)

    best = n + 1
    l = 0
    for r, val in enumerate(arr):
        if 1 <= val <= m:
            if need[val] > 0 and cnt[val] == need[val] - 1:
                satisfied += 1
            cnt[val] += 1

        while satisfied == m and l <= r:
            best = min(best, r - l + 1)
            left_val = arr[l]
            if 1 <= left_val <= m:
                cnt[left_val] -= 1
                if need[left_val] > 0 and cnt[left_val] == need[left_val] - 1:
                    satisfied -= 1
            l += 1

    print(best if best <= n else -1)

if __name__ == "__main__":
    solve()







"""测试数据：
10 4
3 1 2 1 3 4 2 1 3 2
2 1 0 1 
预期输出
5
"""